<?php
	
	include_once 'produit_manager.php';

	/**
	*	Cette classe permet de regrouper les produits commandés par un utilisateur.
	*	Il y a donc un tableau qui contient comme clé un produit et comme valeur, la quantité de ce produit.
	*	Et une quantité de produit en terme de nombre différents de produits.
	**/
	class Panier
	{
		private $_arrayPanier;
		private $_nbrProduits;
		
		/*--------------------------------------------------------------------------*/
		/*----------------------------- CONSTRUCT ----------------------------------*/
		/*--------------------------------------------------------------------------*/
		public function __construct()
		{
			$this->_arrayPanier = array();
			$this->_nbrProduits = 0;
		}
		
		/*--------------------------------------------------------------------------*/
		/*----------------------------- GETTER -------------------------------------*/
		/*--------------------------------------------------------------------------*/
		
        public function getNombreProduits(){
            return $this->_nbrProduits; 
        }

		/** Retourne un tableau avec comme clé : Id Produit et comme valeur : Quantité **/
		public function getListeIDProduitsWithQte(){
            return $this->_arrayPanier; 
        }
		
		/*--------------------------------------------------------------------------*/
		/*----------------------------- METHOD -------------------------------------*/
		/*--------------------------------------------------------------------------*/
		
		/**
		*	Permet d'ajouter produit au panier avec une certaine quantité
		*	$idProduit -> Identifiant du produit.
		*	$qte -> Quantité du produit.
		**/
		public function addProduct($idProduit, $qte)
		{
			$produit = ProduitManager::getProduit($idProduit);
			
			if($this->isExistProduct($idProduit))
				return ;
			else{
				if($produit->getQteStock() < $qte)
					$qte = $produit->getQteStock() ;
					
				$this->_arrayPanier[$idProduit] = $qte;
			}
			
			// MAJ en BDD de la qte de ce produit
			//$nvelleQte = $produit->getQteStock() - $qte;
			//ProduitManager::updateQteProduit($idProduit, $nvelleQte);
			
			$this->_nbrProduits = $this->_nbrProduits + 1;
		}
		
		/**
		*	Permet d'obtenir le produit en fonction d'un identifiant
		*	$idProduit -> Identifiant du produit.
		*	@return : Retourne le produit de cette identifiant
		**/
		public function getProduct($idProduit)
		{
			$produit = ProduitManager::getProduit($idProduit);
			return $produit ;
		}
		
		/**
		*	Permet d'enlever du panier ce produit. 
		*	$idProduit -> Identifiant du produit.
		**/
		public function removeProduct($idProduit)
		{			
			if(!$this->isExistProduct($idProduit))
				return ;
			else
			{
				unset($this->_arrayPanier[$idProduit]);
				$this->_nbrProduits = $this->_nbrProduits - 1;	
			}
		}
		
		/**
		*	Permet de mettre à jour la quantité des produits du panier.
		*	$idProduit -> Identifiant du produit
		*	$qte -> Nouvelle quantité
		**/
		public function updateQteProduct($idProduit, $qte)
		{
			if(!$this->isExistProduct($idProduit))
				return ;
			else
			{
				$this->_arrayPanier[$idProduit] = $qte;
			}
		}	

		/**
		*	Permet de savoir si l'ID produit est déjà présent dans le panier.
		*	@return Retourne un booléan.
		**/
		public function isExistProduct($idProduit)
		{
			if(array_key_exists ($idProduit , $this->_arrayPanier ))
				return true;
			else
				return false;
		}
		
		/**
		*	Permet d'obtenir la quantité actuel de ce produit dans le panier;
		*	@return Retourne un entier. Retourne zéro si le produit existe pas.
		**/
		public function getQteForThisProduct($idProduit)
		{
			if(!$this->isExistProduct($idProduit))
				return 0;
			else
				return $this->_arrayPanier[$idProduit];
		}
	
	
		/**
		*	Permet de vider le panier. 
		**/
		public function cleanPanier()
		{
			foreach($this->_arrayPanier as $key => $value)
			{
				$this->removeProduct($key);
			}
		}
		
		/**
		*	Permet de mettre à jour les quantités dans le stock.
		*	On met à jour les quantités que quand la quantité du stock est supérieure ou égale à la quantité commandée.
		*	Si l'utilisateur en commande trop, tant pis pour lui
		**/
		public function payer()
		{
			foreach($this->_arrayPanier as $key => $value)
			{
				$produit = ProduitManager::getProduit($key);
				$stockActu = $produit->getQteStock();
				
				if($stockActu >= $value)
				{
					$nvelleQteStock = $stockActu - $value;
					ProduitManager::updateQteProduit($key, $nvelleQteStock);
					ProduitManager::IncNbVente($key);
				}
			}
		}
		
		/**
		*	Permet de retourner le prix total du panier sans les frais de ports
		*	@return : Retourne la somme du panier sans les frais de port
		**/
		public function getTotalPanier()
		{
			$total = 0;
			
			foreach($this->_arrayPanier as $key => $value)
			{
				$produit = ProduitManager::getProduit($key);
				$cout = $produit->getPrix() * $value;
				$total = $total + $cout;
			}
			
			return $total;
		}
		
		/**
		*	Permet de retourner le pourcentage du prix pour les frais de ports.
		*	Retourne donc un nombre entre 0.00 et 1.00.
		**/
		public static function getPourcentageFraisPort()
		{
			$percent = 0.10;
			return $percent;
		}
	}

?>